package com.vip.base.utils;

import cn.hutool.core.date.DateUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Jwt工具类
 */
public class JwtUtil {

    /**
     * 签名密钥
     */
    public static final String SECRET = "token!Q@W3e4r";

    /**
     * 生成token
     * @param username 用户名
     * @return
     */
    public static String createToken(String username) {
        Date currentDate = DateUtil.date();
        Map<String, Object> map = new HashMap<>();
        map.put("alg", "HS256");
        map.put("typ", "JWT");
        return JWT.create()
                .withHeader(map)
                //发布时间
                .withIssuedAt(currentDate)
                .withClaim("username",username)
                //过期时间
                .withExpiresAt(DateUtil.offsetDay(currentDate,1))
                .sign(Algorithm.HMAC256(SECRET));
    }

    /**
     * 校验token
     */
    public static void verifyToken(String token){
        JWT.require(Algorithm.HMAC256(SECRET))
                .build()
                .verify(token);
    }

    /**
     * 获取用户名（不校验Token）
     * @param token
     * @return
     */
    public static String getUsername(String token){
        return JWT.decode(token)
                .getClaim("username")
                .asString();
    }

    /**
     * 获取用户名（校验Token）
     * @param token
     * @return
     */
    public static String getUsernameVerify(String token){
        return JWT.require(Algorithm.HMAC256(SECRET))
                .build()
                .verify(token)
                .getClaim("username")
                .asString();
    }

}
